<?php
// +-----------------------------------------------------------------------+
// |                                                                       |
// | WebFormsQA     (Question - Answer)                                    |
// | Copyright  (C) 2010                                                   |
// | Official site  www.scale-tech.ru                                      |
// | email          scale-tech@mail.ru                                     |
// | autor          Alexander Demachev                                     |
// |                                                                       |
// | This program is free software; you can redistribute it and/or modify  |
// | it under the terms of the GNU General Public License as published by  |
// | the Free Software Foundation; version 2 of the License.               |
// |                                                                       |
// | This program is distributed in the hope that it will be useful,       |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of        |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         |
// | GNU General Public License for more details.                          |
// +-----------------------------------------------------------------------+

require_once(INCLUDES_DIR.'auth.class.php');

/*!
 * @page EditPagePage Исходный код класса EditPage
 * @include edit_page.class.php
 */

/*! @addtogroup ClassWebFormsQA Основные классы проекта
 *  Группа включает основные классы используемые в проекте WebFormsQA
 *  @{
 */

/**
 * @class EditPage
 * @brief страница для изменения ответов на вопросы \n
 * @ref EditPagePage
 */
class EditPage extends Page {

    /**
     *  конструктор.
     *  @param object &$smarty_obj   - ссылка на обьект шаблона
     *  @param array  $attr          - массив атрибутов в формате attr["name"] = name_type;
     *  @param string $name_template - название шаблона
     */
    function EditPage(&$smarty_obj, $attr, $name_template)
    {
        parent::Page(&$smarty_obj, $attr, $name_template);
    }

    /** 
     * @brief обновить данные страницы
     * 
     *           Состояния страницы:
     * -  1 -  Авторизация не прошла (стр. EntrancePage),  или пользователь не зарегистрирован или у него нет административного доступа            
     * -  3 -  Успешная авторизация
     * -  4 -  Начальное состояние - ничего не выбрано
     * -  5 -  Выбрана категория для которой нет ни одного вопроса.
     * -  6 -  Выбрана категория со списком вопросов.
     * -  7 -  Выбран вопрос с неправильным или не полным ответом.
     * -  8 -  Ответ изменен и добавлен в базу.

     * -  9 -  Нажата кнопка удалить вопрос, Запрашиваем подтверждение удаление 
     * -  10-  Удаление подтверждено
     * 
     * @return bool результат операции
     */
    function update()
    {
        // обновляем атрибуты страницы и их значени
        // и главный шаблон Smarty
        if( $flag_result = parent::update() ) {

            $base   = &$GLOBALS['base'];
            $nav    = new Navigation($base);

            $state      		= 1;
            $num_find           = 0;
            $offset             = 0;
            $categoryID         = 0;
            $questionID         = 0;
            $navigator          = '';
            $anchor_location 	= '';
            $list_out           = array();
            $list_questions     = array();
            // дерево категорий
            $categories_tree    = array();
            
            $flag_admin = false;
            if( AuthCommon::checkAuthUser($flag_admin) && $flag_admin ) {
            	$state = 3;
            	AuthCommon::getAttrCategoryIDandSession($this, $categoryID);
            }
            
            if ($state == 3) {
                // авторизация прошла успешно
                if ( $categoryID ) {

					$state 			= 5;
                    $list_questions = array();
                    // выбираем вопросы
                    if ($num_find = $base->getCategoryQuestions($categoryID, $list_questions)) {
                        $state = 6;

                        $flag_update = false;

                        if ($this->attr['offset']['set']) {
                            $offset = $this->attr['offset']['value'];
                        }
                        $request        = "index.php?edit_page=&categoryID=$categoryID&";


                        if ($this->attr['questionID']['set'] && $this->attr['questionID']['value']) {
                            // выбран вопрос, для ответа
                            $questionID = $this->attr['questionID']['value'];
            				// явно формирую переход к якорю у выбранной ссылке, для прокрутки страницы 
           					$anchor_location = "questionID".$questionID;
                            
                            $state = 7;
                            if ($this->attr['but_answer']['set'] && $this->attr['answer']['set'] && $this->attr['answer']['value']) {
                                // нажали кнопку ответить на вопрос и есть строка с ответом
                                if ($answer = trim($this->attr['answer']['value'])) {
                                    $state  = 8;
                                    $base->addAnswer($questionID, $answer);
                                    $num_find = $base->getCategoryQuestions($categoryID, $list_questions);
                                }
                            } 

                            if ($this->attr['but_delete']['set']) {
                                // нажали кнопку удалить вопрос
								$state  = 9;
								if( $this->attr['but_delete']['value'] == STRING_OK ) {
									$state  = 10;
									$idx    = array();
									$idx[0] = $questionID;
									if( !$base->delQuestions(TYPE_DELETE, $idx) ) $state = 7;
									else $num_find = $base->getCategoryQuestions($categoryID, $list_questions); // обновляю вопросы

								} else {
									if( $this->attr['but_delete']['value'] == STRING_CANCEL ) $state = 7;
								}
                            }


                        }

                        // определяем строку навигатора
                        if ($nav->getNavigator($num_find, $offset, COUNT_QUESTIONS_PER_PAGE, $request, $navigator)) {
                            // изменен диапазон навигатора
                            // формируем диапазон вопросов для отображения, а не весь список
                            $list_questions = &$nav->selectRange($offset, $offset + COUNT_QUESTIONS_PER_PAGE,
                                                                        $list_questions, $num_find, $list_out);
                        }
                    }
				}

                // получаем дерево категорий
                $nav->getTreeCategories($categoryID, CATEGORIES_TABLE, $categories_tree);


            } // пользователь авторизован

            // текущая выбранная вкладка
            $this->Smarty->assign('current_tabs', ID_PAGE_EDIT);
            
            $this->Smarty->assign('state', $state);
            // количество найденных вопросов
            $this->Smarty->assign('num_find', $num_find);
            // строка навигатора
            $this->Smarty->assign('navigator', $navigator);
            $this->Smarty->assign('offset', $offset);
            $this->Smarty->assign("anchor_location", $anchor_location);

            reset($this->attr);
            // строка с главным параметром перехода на страницу - первый ключ в списке конструктора MainPage
            $this->Smarty->assign('code_page', "index.php?offset=$offset&".key($this->attr));
            $this->Smarty->assign('categoryID', $categoryID);
            $this->Smarty->assign('questionID', $questionID);

            $this->Smarty->assign('categories_tree', $categories_tree);
            $this->Smarty->assign('list_questions', $list_questions);

        } // выбрана данная страница

        return $flag_result;
    } // end update()

}  // finish class EditPage

/*! @} */

?>






